/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.URISyntaxException;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import utils.CargarConfiguraciones;
import utils.respuestaServlet;

/**
 *
 * @author Eduardo Cerritos
 */
public class CerrarCiclo extends HttpServlet {
    
    private Connection conexion;
    private Statement instruccion;

    //Establecer la conexion con la base de datos
    @Override
    public void init (ServletConfig config) throws ServletException{

    //Intentar la conexion y crear instrucciones
        try{
        CargarConfiguraciones cc = new CargarConfiguraciones();
        Class.forName(cc.getValor("driver"));
        conexion =  DriverManager.getConnection(cc.getValor("urlbase"),
                    cc.getValor("usuario"),
                    cc.getValor("clave"));
        //Crear la instruccion
        instruccion = conexion.createStatement();
        }catch(Exception e){
            e.printStackTrace();
        }//end catch


    }

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        String sql, cicloAct;
        try {
            // 1. obtener el ciclo actual
            CargarConfiguraciones cc = new CargarConfiguraciones();
            cicloAct = cc.getValor("ciclo");
            // 2. desinscribir a los alumnos de las materias del ciclo a cerrar
            sql = "delete from alumno_materia " +
                  "where codmateria in ("+
                  "select m.codmateria from materia m where m.ciclo = '" + cicloAct + "')";
            System.out.println(sql);
            instruccion.executeUpdate(sql);
            // 3. desasignar a los docentes de las materias del ciclo a cerrar
            sql = "delete from docente_materia " +
                  "where codmateria in ("+
                  "select m.codmateria from materia m where m.ciclo = '" + cicloAct + "')";
            System.out.println(sql);
            instruccion.executeUpdate(sql);
            // 4. cambiar el valor de la propiedad ciclo, al ciclo actual
            if(Integer.parseInt(cicloAct)==1)
                cicloAct = "2";
            else
                cicloAct = "1";
            cc.setValor("ciclo", cicloAct);

            respuestaServlet.imprimirEncabezado(out, "Cerrar ciclo");
            out.println("<ol>");
            out.println("<li>Ingrese las materias del ciclo " + cicloAct + "</li>" );
            out.println("<li>Asigne las materias a los docentes</li>" );
            out.println("<li>Ingrese los alumnos de las materias del ciclo " + cicloAct + "</li>");
            out.println("</ol>");
            respuestaServlet.imprimirPie(out);
            
        } catch (URISyntaxException ex) {
            Logger.getLogger(CerrarCiclo.class.getName()).log(Level.SEVERE, null, ex);
            respuestaServlet.imprimirEncabezado(out, "Cerrar Ciclo");
            out.println("Ocurrio un error al cerrar el ciclo, verifique su archivo de configuraciones");
            respuestaServlet.imprimirPie(out);
        } catch (SQLException ex) {
            Logger.getLogger(CerrarCiclo.class.getName()).log(Level.SEVERE, null, ex);
            respuestaServlet.imprimirEncabezado(out, "Cerrar Ciclo");
            out.println("Ocurrio un error al cerrar el ciclo");
            respuestaServlet.imprimirPie(out);
        } finally { 
            out.close();
        }
    }

     @Override
    public void destroy()
    {

        try{
            instruccion.close();
            conexion.close();

        }
        catch(SQLException exc)
        {
            exc.printStackTrace();
        }

    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
